public class GameMap {
    private int[][] map;    // 值为状态，0为死细胞， 1为活细胞
    private int rows;
    private int cols;

    // 初始化图
    public void init(int rows, int cols) {
        this.rows = rows;
        this.cols = cols;
        map = new int[rows][cols];
    }

    // 随机生成
    public void reset(double lifeRatio) {
        for (int i = 0; i < rows; i++)
            for (int j = 0; j < cols; j++)
                map[i][j] = Math.random() > lifeRatio / 100 ? 0 : 1;
    }

    // 地图上一个方格周围活细胞数
    public int getNeighborCount(int row, int col) {
        int count = 0;

        //上边
        if (row > 0) {
            count += map[row - 1][col];
        }
        //下边
        if (row < cols - 1) {
            count += map[row + 1][col];
        }
        //左边
        if (col > 0) {
            count += map[row][col - 1];
        }
        //右边
        if (col < rows - 1) {
            count += map[row][col + 1];
        }
        //左上角
        if (row > 0 && col > 0) {
            count += map[row - 1][col - 1];
        }
        //右上
        if (row > 0 && col < cols - 1) {
            count += map[row - 1][col + 1];
        }
        //左下
        if (row < rows - 1 && col > 0) {
            count += map[row + 1][col - 1];
        }
        //右下
        if (row < rows - 1 && col < cols - 1) {
            count += map[row + 1][col + 1];
        }

        return count;
    }

    // 更新状态
    public void set(int[][] map) {
        this.map = map;
    }

    // 获取状态
    public int get(int row, int col) {
        return map[row][col];
    }

    public int getRows() {
        return rows;
    }

    public int getCols() {
        return cols;
    }
}
